#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QTime>
#include <random>
#include <QDateTime>
#include <QPushButton>
#include "qcustomplot.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void realtimeDataSlot();               // 实时数据更新槽函数
    void onZoomXChanged(int value);        // X轴缩放控件值改变时的槽函数
    void onZoomYChanged(int value);        // Y轴缩放控件值改变时的槽函数
    void onPanXSliderReleased();           // X轴拖拽滑块释放时的槽函数
    void onPanYSliderReleased();           // Y轴拖拽滑块释放时的槽函数
    void onPanXChanged(int value);         // X轴拖拽滑块值改变时的槽函数
    void onPanYChanged(int value);         // Y轴拖拽滑块值改变时的槽函数
    void onAutoUpdateTimer();              // 自动更新定时器超时时的槽函数
    void onMouseMove(QMouseEvent* event);  // 鼠标移动事件的槽函数
    void onPauseButtonClicked();           // 暂停按钮点击事件的槽函数
    void onScreenshotButtonClicked();      // 截图按钮点击事件的槽函数
    void onAddTimeMarkerClicked();         // 添加时间标记按钮点击事件的槽函数
    void onExportDataClicked();            // 导出数据按钮点击事件的槽函数
    void onClearMarkersClicked();          // 清除标记按钮点击事件的槽函数

private:
    Ui::MainWindow *ui;                    // UI对象
    QTimer dataTimer;                      // 数据更新定时器
    QTimer autoUpdateTimer;                // 自动更新定时器
    bool m_userInteracting = false;        // 用户是否正在交互
    bool m_paused = false;                 // 数据滚动是否暂停
    double m_xRange = 8.0;                 // 初始X轴范围
    double m_yRange = 2.4;                 // 初始Y轴范围(-1.2到1.2)
    double m_xCenter = 0;                  // X轴中心点
    double m_yCenter = 0;                  // Y轴中心点
    double m_xZoomFactor = 1.0;            // X轴缩放因子
    double m_yZoomFactor = 1.0;            // Y轴缩放因子
    double m_xPanAccumulator = 0;          // X轴拖拽累计偏移
    double m_yPanAccumulator = 0;          // Y轴拖拽累计偏移
    QTime m_startTime;                     // 程序启动时间
    std::mt19937 m_rng;                    // 随机数生成器

    // 鼠标悬停显示组件
    QCPItemTracer* m_valueTracer;          // 值跟踪点
    QCPItemText* m_valueLabel;             // 值标签
    QCPItemLine* m_vLine;                  // 垂直线
    QCPItemLine* m_hLine;                  // 水平线

    // 时间标记列表
    QList<QCPItemText*> m_timeMarkers;     // 存储所有时间标记的列表
};
#endif // MAINWINDOW_H
